package la.iok.hzsvn.lewin.movie.shopmovie.service;

import la.iok.hzsvn.lewin.movie.core.Token;
import la.iok.hzsvn.lewin.movie.core.shopmovie.vo.ShopMovieVo;
import la.iok.hzsvn.lewin.movie.shopmovie.entity.ShopMovie;
import la.iok.hzsvn.lewin.movie.shopmovie.model.ShopMovieListParam;
import la.iok.hzsvn.lewin.movie.shopmovie.model.ShopMovieModifyParam;
import la.iok.hzsvn.lewin.movie.shopmovie.model.ShopMovieParam;
import la.iok.hzsvn.lewin.mybatis.model.PageParam;
import la.iok.hzsvn.lewin.mybatis.model.PageVo;
import la.iok.hzsvn.lewin.mybatis.model.SortParam;
import la.iok.hzsvn.lewin.mybatis.service.BaseService;
import la.iok.hzsvn.share.annotations.NotNull;
import la.iok.hzsvn.share.annotations.Nullable;

public interface ShopMovieService extends BaseService<ShopMovie,Long> {
    /**
     * 保存店铺剧本.只能是店铺内人员操作或者超级管理员操作
     * @param token 操作用户
     * @param param 剧本参数
     * @return 新增加记录id
     */
    Long save(@NotNull Token token, @NotNull ShopMovieParam param);

    /**
     * 修改店铺剧本.只能是店铺内人员操作或者超级管理员操作
     * @param token 操作用户
     * @param id 店铺剧本id
     * @param param 剧本参数
     */
    void modify(@NotNull Token token, @NotNull Long id, @NotNull ShopMovieModifyParam param);

    /**
     * 删除店铺剧本
     * @param token 操作用户
     * @param id 店铺剧本id
     */
    void delete(@NotNull Token token, @NotNull Long id);

    /**
     * 分页查询列表
     * @param pageParam 分页参数
     * @param sortParam 排序参数
     * @param listParam 列表过滤参数
     * @return 分页数据
     */
    @NotNull
    PageVo<ShopMovieVo> page(@NotNull PageParam pageParam, @NotNull SortParam sortParam,
                             @NotNull ShopMovieListParam listParam);

    /**
     * 剧本上线
     * @param token 操作用户
     * @param id 店铺剧本id
     */
    void online(@NotNull Token token, @Nullable Long id);

    /**
     * 剧本下线
     * @param token 操作用户
     * @param id 店铺剧本id
     */
    void offline(@NotNull Token token, @Nullable Long id);
}
